home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / gethostname.c < prev    next >
C/C++ Source or Header  |  1992-06-16  |  2KB  |  79 lines

  1. /* 
  2.  * gethostname.c --
  3.  *
  4.  *    Procedure to simulate Unix gethostname system call.
  5.  *
  6.  * Copyright 1986 Regents of the University of California
  7.  * All rights reserved.
  8.  */
  9.  
  10. #ifndef lint
  11. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/gethostname.c,v 1.5 92/06/16 11:20:59 jhh Exp $ SPRITE (Berkeley)";
  12. #endif not lint
  13.  
  14. #include <host.h>
  15. #include <string.h>
  16. #include <sys.h>
  17. #include <sys/param.h>
  18. #include <status.h>
  19. #include "compatInt.h"
  20.  
  21.  
  22. /*
  23.  *----------------------------------------------------------------------
  24.  *
  25.  * gethostname --
  26.  *
  27.  *    Puts the host name into the the given buffer.
  28.  *
  29.  * Results:
  30.  *    0 is returned if the call was completed successfully.
  31.  *    Otherwise, -1 is returned and errno gives more information.
  32.  *
  33.  * Side effects:
  34.  *    The name buffer is modified.
  35.  *
  36.  *----------------------------------------------------------------------
  37.  */
  38.  
  39. int
  40. gethostname(name, nameLen)
  41.     char *name;        /* Place to store name. */
  42.     int nameLen;    /* Length of name buffer. */
  43. {
  44.     char        tmp[MAXHOSTNAMELEN];
  45.     ReturnStatus     status;
  46.  
  47.     Host_Entry *entry;
  48.     int localID;
  49.     /*
  50.      * Try using the new system call. If that doesn't work then do it
  51.      * the old way. Strip out the old way once all kernels have the
  52.      * system call -- jhh
  53.      */
  54.  
  55.     status = Sys_GetHostName(tmp);
  56.     if (status == SYS_INVALID_SYSTEM_CALL) {
  57.     status = Proc_GetHostIDs(&localID, (int *) NULL);
  58.     if (status != SUCCESS) {
  59.         errno = Compat_MapCode(status);
  60.         return UNIX_ERROR;
  61.     }
  62.  
  63.     entry = Host_ByID(localID);
  64.     if (entry == (Host_Entry *) NULL) {
  65.         Host_End();
  66.         return UNIX_ERROR;
  67.     }
  68.     strncpy(name, entry->name, nameLen-1);
  69.     name[nameLen-1] = 0;
  70.     Host_End();
  71.     } else if (status != SUCCESS) {
  72.     errno = Compat_MapCode(status);
  73.     return UNIX_ERROR;
  74.     } else {
  75.     strncpy(name, tmp, nameLen);
  76.     }
  77.     return 0;
  78. }
  79.